উদাহরণ সহ Native Query তৈরি

Java Technologies - স্প্রিং বুট জেপিএ (Spring Boot JPA) - Spring Boot JPA এবং Native Queries
276

Spring Boot JPA-তে Native Query ব্যবহার করে আপনি সরাসরি SQL কুয়েরি লিখতে পারেন। এই কুয়েরি Spring Data JPA এর মাধ্যমে ডেটাবেসে কার্যকর করা হয় এবং এটি JPQL (Java Persistence Query Language) এর পরিবর্তে সাধারণ SQL কুয়েরি হতে পারে। Native Queries সাধারণত তখন ব্যবহৃত হয় যখন আপনি JPQL দিয়ে কিছু কাস্টম বা জটিল কুয়েরি করতে পারছেন না বা যখন আপনি সরাসরি ডেটাবেসের স্ট্রাকচার এবং পারফরম্যান্স অপটিমাইজেশন সম্পর্কে আরও নিয়ন্ত্রণ চান।

Native Query এর সুবিধা:

  • Performance Optimization: কিছু ডেটাবেস অপারেশন যা JPQL দিয়ে কার্যকরী নয়, তা Native SQL কুয়েরি দিয়ে দ্রুত এবং কার্যকর করা যায়।
  • Complex Queries: যখন ডেটাবেসের বিশেষ ফিচার যেমন যোগদান (joins), সাবকুয়েরি ইত্যাদি প্রয়োজন হয়, তখন Native Query ব্যবহার করা সুবিধাজনক।
  • Direct Database Access: আপনাকে JPQL এর সীমাবদ্ধতা ছাড়াই সরাসরি SQL কুয়েরি ব্যবহার করার সুযোগ দেয়।

Native Query তৈরি করার পদ্ধতি

Spring Data JPA-তে native SQL queries ব্যবহার করতে @Query অ্যানোটেশন ব্যবহার করা হয়, যেখানে nativeQuery = true প্যারামিটারটি সন্নিবেশ করতে হয়।

উদাহরণ: Native Query ব্যবহার করে Custom Query তৈরি

ধরা যাক, আমাদের একটি Product Entity রয়েছে এবং আমরা একটি Native SQL কুয়েরি ব্যবহার করে Product Entity এর ডেটা ফিল্টার করতে চাই।

Step 1: Entity Class

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Double price;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }
}

Step 2: Native Query Repository Interface

ProductRepository ইন্টারফেসে @Query অ্যানোটেশন ব্যবহার করে Native SQL কুয়েরি তৈরি করা হয়েছে:

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {

    // Native SQL Query using @Query annotation
    @Query(value = "SELECT * FROM product WHERE price > :price", nativeQuery = true)
    List<Product> findProductsByPriceGreaterThan(@Param("price") Double price);

    // Another Native Query example using a custom SQL query with JOIN
    @Query(value = "SELECT * FROM product p JOIN category c ON p.category_id = c.id WHERE c.name = :categoryName", nativeQuery = true)
    List<Product> findProductsByCategoryName(@Param("categoryName") String categoryName);
}

এখানে দুটি কাস্টম Native SQL কুয়েরি তৈরি করা হয়েছে:

  1. findProductsByPriceGreaterThan: এটি একটি Native SQL কুয়েরি যা price এর ভিত্তিতে Product Entity এর পণ্য নির্বাচন করে।
  2. findProductsByCategoryName: এটি একটি JOIN কুয়েরি যা Product এবং Category টেবিলের মধ্যে সম্পর্ক স্থাপন করে এবং নির্দিষ্ট ক্যাটেগরির নাম অনুযায়ী পণ্য নির্বাচন করে।

Step 3: Service Class

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public List<Product> getProductsByPrice(Double price) {
        return productRepository.findProductsByPriceGreaterThan(price);
    }

    public List<Product> getProductsByCategory(String categoryName) {
        return productRepository.findProductsByCategoryName(categoryName);
    }
}

Step 4: Controller Class

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/products")
public class ProductController {

    @Autowired
    private ProductService productService;

    // Endpoint to get products by price
    @GetMapping("/price")
    public List<Product> getProductsByPrice(@RequestParam Double price) {
        return productService.getProductsByPrice(price);
    }

    // Endpoint to get products by category
    @GetMapping("/category")
    public List<Product> getProductsByCategory(@RequestParam String categoryName) {
        return productService.getProductsByCategory(categoryName);
    }
}

Step 5: Running the Application

এখন, আপনি /products/price?price=100 বা /products/category?categoryName=Electronics রিকোয়েস্ট দিয়ে কাস্টম Native Query কার্যকর করতে পারবেন।


Native Query এর সাথে Parameterized Query

Spring Data JPA-তে Native SQL কুয়েরি ব্যবহার করার সময়, আপনি প্যারামিটার ব্যবহার করতে পারেন। আপনি @Param অ্যানোটেশন ব্যবহার করে কুয়েরির প্যারামিটার প্রেরণ করতে পারেন।

উদাহরণ:

@Query(value = "SELECT * FROM product WHERE price BETWEEN :minPrice AND :maxPrice", nativeQuery = true)
List<Product> findProductsByPriceRange(@Param("minPrice") Double minPrice, @Param("maxPrice") Double maxPrice);

এখানে, প্যারামিটার হিসাবে minPrice এবং maxPrice ব্যবহার করা হয়েছে, যা কুয়েরিতে @Param অ্যানোটেশন দ্বারা নির্দিষ্ট করা হয়েছে।


Native Query এর সুবিধা

  • Performance Optimization: কিছু কাস্টম বা জটিল কুয়েরি JPQL এর মাধ্যমে কার্যকর করা সম্ভব নয়। Native SQL কুয়েরি ডেটাবেস অপ্টিমাইজেশন, ইনডেক্সিং এবং আরও অন্যান্য টেবিল অপারেশন পরিচালনায় সাহায্য করে।
  • Complex Queries: জটিল ডেটাবেস কুয়েরি যেমন সাবকুয়েরি, জয়েন এবং গ্রুপ বাই ইত্যাদি Native SQL কুয়েরির মাধ্যমে সহজে করা যায়।
  • Direct Database Access: Native Query এর মাধ্যমে সরাসরি SQL কুয়েরি ব্যবহার করা যায়, যা ডেটাবেসের টেবিল স্ট্রাকচার অনুযায়ী দ্রুত কাজ করে।

সারাংশ

Native SQL Queries Spring Data JPA-তে কাস্টম কুয়েরি তৈরি করার জন্য একটি শক্তিশালী উপায়। @Query অ্যানোটেশন ব্যবহার করে nativeQuery = true দিয়ে আপনি ডেটাবেসের সরাসরি SQL কুয়েরি লিখতে পারেন, যা জটিল ডেটাবেস অপারেশন, পারফরম্যান্স অপটিমাইজেশন এবং আরও অনেক ক্ষেত্রে কার্যকরী হয়। Native Queries ব্যবহার করে Spring Data JPA-তে সরাসরি SQL কুয়েরি কার্যকর করা সম্ভব, যা Spring Boot অ্যাপ্লিকেশনের ডেটাবেস ম্যানেজমেন্টকে আরও নমনীয় এবং দ্রুত কার্যকর করে তোলে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...